// 传统去噪算法效果
#include <vector>
#include <cmath>
#include "Audio_RT_FFT.h"
#include "Audio_RT_Process.h"
#include "utool_AudioRT/Config.h"


// 最基础的谱减法
void Spe_Sub(std::vector<std::vector<__fp16>>& mag,
std::vector<std::vector<__fp16>>& SPE_mag,
std::vector<__fp16>& Noise_mag){
    // 先初始化参数
    SPE_mag.resize(2, std::vector<__fp16>(FFT_BINS)); // 固定就是最后2帧的IFFT
    size_t num_frames = mag.size(); // 动态获取mag的行数
    // 先计算当前最后一帧的能量是否小于一定程度，小于的话就是噪声进行减去
    float Energe_Value = 0;
    float inputSPL_Frame = 0; // 整帧声压级
    Energe_Value = RT_Energe_Frame(mag,num_frames - 1);
    // 计算当前帧的声压级
    inputSPL_Frame = 20 * std::log10(Energe_Value) + 120;
    if(inputSPL_Frame <= 95){
        for (size_t k = 0; k < FFT_BINS; ++k) {
            Noise_mag[k] = mag[num_frames - 1][k];
        }
    }
    for (size_t i = num_frames - 2; i < num_frames; ++i) {
        for (size_t k = 0; k < FFT_BINS; ++k) {
            SPE_mag[i - num_frames + 2][k] = std::max(0.000000001f,static_cast<float>(mag[i][k] - Noise_mag[k]));
        }
    }
}
